package com.javabase.d01_base;

/**
 *
 类型	位数	范围（近似）	        默认值	    包装类
 byte	8	-128 到 127	        0	        Byte
 short	16	-32,768 到 32,767	0	        Short
 int	32	-2³¹ 到 2³¹-1（±21亿）	0	    Integer
 long	64	-2⁶³ 到 2⁶³-1	        0L	                Long
 float	32	±1.4E-45 到 ±3.4E38（6-7位小数）	    0.0f	Float
 double	64	±4.9E-324 到 ±1.8E308（15-16位小数）	0.0	    Double
 */
public class V01_operator {
    public static void main(String[] args) {
        V01_operator operator = new V01_operator();
        operator.baseOpertorV1();
        System.out.println("==========");
        operator.baseOpertorV2();
        System.out.println("==========");
        operator.baseOpertorV3();
        System.out.println("==========");
        operator.baseOpertorV4();
        System.out.println("==========");
        operator.baseOpertorV5();
        System.out.println("==========");
        operator.baseOpertorV6();
    }

    // 算术运算符的使用
    public void baseOpertorV1() {
        int a = 10;
        int b = 2;
        System.out.println(a + b);
        System.out.println(a - b);
        System.out.println(a * b);
        System.out.println(a / b);
        System.out.println(5 / 2); // 2.5 ==> 2
        System.out.println(5.0 / 2); // 2.5
        System.out.println(1.0 * 5 / 2); // 2.5

        System.out.println("-------------");

        int num = 5;
        System.out.println("aaa" + num); // aaa5
        System.out.println(num + 5);
    }

    // 掌握自增自减运算符的使用
    public void baseOpertorV2() {
        int a = 10;
        ++a; // a = a + 1
        System.out.println(a);

        --a; // a = a - 1
        System.out.println(a);
        // System.out.println(2++); // 自增自减只能操作变量不能操作字面量的，会报错！
        System.out.println("----------");

        int i = 10;
        int res = ++i; // res=11, i=11（前置：先自增再赋值）
        System.out.println(i);
        System.out.println(res);

        int j = 10;
        // j = j + 1;  // j = 11
        // res2 = j;  // res2 = 10
        int res2 = j++; // res2=10, j=11（后置：先赋值再自增）
        System.out.println(j);
        System.out.println(res2);
    }

    // 掌握扩展赋值运算符的使用
    public void baseOpertorV3() {
        double a = 8.88;
        double b = 230;
        a += b; // a = (double)(a + b)
        System.out.println(a);
        a -= b; // a = (double)(a + b)
        System.out.println(a);
        a *= b; // a = (double)(a * b)
        System.out.println(a);
        a /= b; // a = (double)(a / b)
    }

    // 掌握关系运算符的基本使用
    public void baseOpertorV4() {
        int a = 10;
        int b = 5;
        boolean rs = a > b;
        System.out.println(rs);
        System.out.println(a >= b); // 要么a大于b,或者a等于b
        System.out.println(2 >= 2); // true
        System.out.println(a < b);  // false
        System.out.println(a <= b); // false
        System.out.println(2 <= 2); // true
        System.out.println(a == b); // false
        System.out.println(a != b); // true
        System.out.println(10 != 10); // false

        System.out.println(false ^ true ^ false);
    }

    // 掌握逻辑运算符的使用
    public void baseOpertorV5() {
        double size = 6.5;
        int storage = 16;
        // 1、& 前后的条件的结果必须都是true ,结果才是true.
        boolean res1 = size >= 6.88 & storage >= 8;
        System.out.println(res1);
        // 2、| 只要多个条件中有一个是true,结果就是true.
        boolean res2 = size >= 6.95 | storage >= 8;
        System.out.println(res2);
        // 3、!取反
        System.out.println(!true); // false
        System.out.println(!false); // true
        System.out.println(!(2 > 1)); // false

        // 4、^ 前后条件的结果相同时返回false，不同时返回true.
        System.out.println(true ^ true); // false
        System.out.println(false ^ false); // false
        System.out.println(true ^ false); // true
        System.out.println(false ^ true); // true

        // 5、&& 左边为false，右边不执行
        System.out.println(size > 100 && ++size > 99);
        System.out.println(size);

        // 6、|| 左边是true ，右边就不执行。
        System.out.println(size > 3 || ++size > 40);
        System.out.println(size);
    }

    // 掌握三元运算符的基本使用
    public void baseOpertorV6() {
        double score = 58.5;
        String rs = score >= 60 ? "成绩及格" : "成绩不及格";
        System.out.println(rs);

        System.out.println(10 > 3 || 10 > 3 && 10 < 3); // true
        System.out.println((10 > 3 || 10 > 3) && 10 < 3); // false
    }
}

